package com.efast.cafe.portal.dao.company;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.efast.cafe.portal.bean.company.PortalCompanyUserBean;
import com.efast.cafe.portal.bean.company.PortalCompanyUserOrgBean;
import com.efast.cafe.portal.bean.company.PortalCompanyUserQueryBean;
import com.efast.cafe.portal.entity.company.PortalCompanyRole;
import com.efast.cafe.portal.entity.company.PortalCompanyUser;

public interface PortalCompanyUserDao {

	/**
	 * 获取企业用户已分配的角色列表 默认附加条件companyCode
	 * 
	 * @param username
	 * @return
	 */
	public List<PortalCompanyRole> queryUserHasRoleList(@Param(value = "username") String username,
			@Param(value = "companyCode") String companyCode);

	/**
	 * 获取企业用户未被分配的角色列表 默认附加条件companyCode
	 * 
	 * @param username
	 * @return
	 */
	public List<PortalCompanyRole> queryUserNotHasRoleList(@Param(value = "username") String username,
			@Param(value = "companyCode") String companyCode);

	public List<PortalCompanyUser> queryByOrgAndUser(
			@Param(value = "portalCompanyUserOrgId") Long portalCompanyUserOrgId,
			@Param(value = "requestCompany") String requestCompany);

	/**
	 * @Date : 2016-8-24
	 * @param username
	 * @return
	 */
	public List<PortalCompanyUser> queryByListUser(@Param(value = "username") String[] username,
			@Param(value = "companyCode") String companyCode);

	/**
	 * @Date : 2016-8-24
	 * @param userHasSelectList
	 * @return
	 */
	public List<PortalCompanyUser> queryByNotPositionUserName(
			@Param(value = "userHasSelectList") List<PortalCompanyUser> userHasSelectList,
			@Param(value = "companyCode") String companyCode);

	/**
	 * @Date : 2016-8-24
	 * @param username
	 * @param userHasSelectList
	 * @return
	 */
	public List<PortalCompanyUser> queryByNotReporttoUserName(@Param(value = "username") String[] username,
			@Param(value = "userHasSelectList") List<PortalCompanyUser> userHasSelectList,
			@Param(value = "companyCode") String companyCode);

	/**
	 * 获取当前企业所有有效用户
	 * 
	 * @Date : 2016年11月22日
	 * @param requestCompany
	 * @return
	 */
	public List<PortalCompanyUserBean> getListUserByCompanyUserList(PortalCompanyUserQueryBean querybean);

	/**
	 * 获取当前企业所有有效用户
	 * 
	 * @Date : 2016年11月22日
	 * @param requestCompany
	 * @return
	 */
	public Integer getListUserByCompanyUserCount(PortalCompanyUserQueryBean querybean);

	/**
	 * 加载用户列表及其顶级部门
	 * 
	 * @Date : 2016年12月9日
	 * @param queryBean
	 * @return
	 */
	public List<PortalCompanyUserBean> getListUserTopOrgByCompanyUserList(PortalCompanyUserQueryBean queryBean);

	/**
	 * 加载用户列表及其顶级部门
	 * 
	 * @Date : 2016年12月9日
	 * @param queryBean
	 * @return
	 */
	public Integer getListUserTopOrgByCompanyUserCount(PortalCompanyUserQueryBean queryBean);

	/**
	 * 查询当前用户所属顶级部门 ID
	 * 
	 * @param orgId
	 * @param companyCode
	 * @return
	 */
	public Long getUserTopOrg(@Param(value = "orgId") Long orgId, @Param(value = "companyCode") String companyCode);

	/**
	 * 通过用户ID列查询用户名称
	 * 
	 * @param userIds
	 * @param companyCode
	 * @return
	 */
	public List<String> queryListNameByUserIds(@Param(value = "userIds") List<Integer> userIds,
			@Param(value = "companyCode") String companyCode);

	public PortalCompanyUser userLogin(@Param(value = "companyCode") String companyCode,
			@Param(value = "username") String username, @Param(value = "password") String password);

	/**
	 * 通过username和code查是人的信息
	 * 
	 * @param companyCode
	 * @param username
	 * @param password
	 * @return
	 */
	public PortalCompanyUserBean queryUserInfo(@Param(value = "companyCode") String companyCode,
			@Param(value = "username") String username);

	/**
	 * 根据角色id查询用户信息
	 * 
	 * @param companyCode
	 * @param roleIds
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月25日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByRole(@Param(value = "companyCode") String companyCode,
			@Param(value = "roleIds") List<Integer> roleIds);

	/**
	 * 根据级别查询用户信息
	 * 
	 * @param companyCode
	 * @param levelIds
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月25日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByLevel(@Param(value = "companyCode") String companyCode,
			@Param(value = "levelIds") List<Integer> levelIds);

	/**
	 * 根据组织查询用户信息
	 * 
	 * @param companyCode
	 * @param orgIds
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月25日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByOrg(@Param(value = "companyCode") String companyCode,
			@Param(value = "orgIds") List<Integer> orgIds);

	/**
	 * 根据职位查询用户信息
	 * 
	 * @param companyCode
	 * @param positionIds
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月25日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByPosition(@Param(value = "companyCode") String companyCode,
			@Param(value = "positionIds") List<Integer> positionIds);

	/**
	 * 根据查询条件查询用户信息
	 * 
	 * @param queryBean
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月26日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByConditions(PortalCompanyUserQueryBean queryBean);

	/**
	 * 根据查询条件查询用户信息
	 *
	 * @param queryBean
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月26日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByOrgList(PortalCompanyUserQueryBean queryBean);


	public List<PortalCompanyUserBean> queryUserInfoByOrgId(@Param(value = "companyCode") String companyCode,@Param(value = "orgId") Long orgId);

	
	public List<String> queryNamesListByOrgId(@Param(value = "ordIdList") List ordIdList,
			@Param(value = "username") String username,
			@Param(value = "companyCode") String companyCode);

	/**
	 * 根据用id列表查询用户信息
	 * 
	 * @param requestCompany
	 * @param ids
	 * @return List<PortalCompanyUserBean>
	 * @Author Administrator
	 * @Date 2017年9月27日
	 */
	public List<PortalCompanyUserBean> queryUserInfoByIds(@Param(value = "companyCode") String requestCompany,
			@Param(value = "userIds") List<Integer> ids);
	
	
	/**
	 * 查询用户详情
	 * @param portalCompanyUserId
	 * @return
	 */
	public PortalCompanyUser queryUserDetail(@Param(value = "portalCompanyUserId")Integer portalCompanyUserId);

	/**
	 * 获取用户以及组织和职位
	    * @Title: queryUserAndOrgInfo
	    * @Description: TODO(这里用一句话描述这个方法的作用)
	    * @param @param companyCode
	    * @param @param username
	    * @param @return    参数
	    * @return PortalCompanyUserOrgBean    返回类型
	    * @throws
	 */
	public PortalCompanyUserOrgBean queryUserAndOrgInfo(@Param(value = "companyCode") String companyCode,@Param(value = "username") String username);

	Integer queryUserCountByType(@Param(value = "companyCode")String companyCode,@Param(value = "username")String username,@Param(value = "type")String type);
	
	void regWechatUser(@Param(value = "companyCode")String companyCode,@Param(value = "username")String username,
			@Param(value = "type")String type,@Param(value = "nickname")String nickname,@Param(value="sex")Integer sex);
	
	Integer queryUserInfoByConditionsCount(PortalCompanyUserQueryBean queryBean);

	Integer queryUserInfoByOrgCount(PortalCompanyUserQueryBean queryBean);
}
